package com.fxu.framework.core.util;

import cn.hutool.core.util.ReflectUtil;
import cn.hutool.core.util.StrUtil;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * Bean工具类
 * <p> 把一个拥有对属性进行set和get方法的类，我们就可以称之为JavaBean。 </p>
 * @author fangxu
 * @see cn.hutool.core.bean.BeanUtil
 * @version 1.0.0
 */
public class BeanUtil extends cn.hutool.core.bean.BeanUtil {

	/**
	 * Map数据对象集合转换为指定的类对象集合
	 * @param <SE> 限制范型
	 * @param mapList Map数据对象集合
	 * @param beanClass Bean Class
	 * @param isIgnoreError 是否忽略注入错误
	 * @return 对象集合
	 */
	@SuppressWarnings("unchecked")
	public static <SE> List<SE> mapListToBean(List<Map<String, Object>> mapList, Class<SE> beanClass, boolean isIgnoreError) {
		if (mapList != null) {
			@SuppressWarnings("rawtypes")
			List newList = new ArrayList<>(mapList.size());
			for (Map<?, ?> map : mapList) {
				newList.add(fillBeanWithMap(map, ReflectUtil.newInstance(beanClass), isIgnoreError));
			}
			return newList;
		}
		return null;
	}

	/**
	 * 对象列表转换为Map对象列表
	 * @param beanList 对象列表
	 * @return Map对象列表
	 */
	public static List<Map<String, Object>> beanListToMap(List<?> beanList) {
		if (beanList != null) {
			List<Map<String, Object>> newList = new ArrayList<>(beanList.size());
			for (Object bean : beanList) {
				newList.add(beanToMap(bean));
			}
			return newList;
		}
		return null;
	}

	/**
	 * 获得Entity类的简写别名
	 * @param clazz JavaBean对象类
	 * @return UserRole to userRole
	 */
	public static String getBeanName(Class<?> clazz) {
		return StrUtil.lowerFirst(clazz.getSimpleName());
	}

}